package com.example.edu.Utils;

public class MyConstants {
    public static final String LOCK = "lock:";
    public static final String USER_KEY = "user:";
    public static final String TOKEN_KEY = "token:";
    public static final String PICTURE_KEY = "picture:";
    public static final String TAG_KEY = "tag:";
    public static final String HOT_ARTICLES_KEY = "hot_articles:";
    public static final String MIND_MAP_KEY = "mindMap:";
    public static final String OUTLINE_KEY = "outline:";
    public static final String PLAN_KEY = "plan:";
    public static final String VIEW_KEY = "view:";
    public static final String LIKE_KEY = "like:";
    public static final String COLLECT_KEY = "collect:";
    public static final String LAST_SAVE_KEY = "lastSave:";
    public static final long USER_CACHE_TTL = 72L;
    public static final long TOKEN_CACHE_TTL = 24L;
    public static final long PICTURE_CACHE_TTL = 240L;
    public static final long TAG_CACHE_TTL = 240L;
    public static final long HOT_ARTICLES_CACHE_TTL = 24L;
    public static final long LAST_SAVE_TTL = 3L;
    public static final long CACHE_NULL_TTL = 1L;
    public static final long LOCK_TTL = 5L;
    public static final int DOCUMENT_MODEL_INPUT_MAX_LENGTH = 5000;
    public static final int HISTORY_NAME_MAX_LENGTH = 10;
    public static final long SSE_TIMEOUT = 300000L;
    public static final long DELAY_TIME = 60000L;
    public static final String EXAMPLE_OUTLINE_STRUCTURE = "example_outline_structure";
    public static final String EXAMPLE_OUTLINE_CONTENT = "example_outline_content";
    public static final String PICTURE_ADDRESS = "C:/Program Files/NingXiEDU/EduData/picture";
    public static final String DOCUMENT_ADDRESS = "C:/Program Files/NingXiEDU/EduData/document";
    public static final String EXAMPLE_OUTLINE_STRUCTURE_ADDRESS = "C:/Program Files/NingXiEDU/EduData/example/outline_0.txt";
    public static final String EXAMPLE_OUTLINE_CONTENT_ADDRESS = "C:/Program Files/NingXiEDU/EduData/example/outline_1.txt";
    public static final String INIT_ADDRESS = "C:/Program Files/NingXiEDU/EduData/ai_docs";
    public static final String EXAMPLE_OUTLINE_ADDRESS = "C:/Program Files/NingXiEDU/EduData/example/outline.json";
    public static final String EX_OUTLINE_ADDRESS = "C:/Program Files/NingXiEDU/EduData/example/ex_outline.json";
    public static final String EXAMPLE_PLAN_ADDRESS = "C:/Program Files/NingXiEDU/EduData/example/plan.json";
    public static final String EX_PLAN_ADDRESS = "C:/Program Files/NingXiEDU/EduData/example/ex_plan.json";
    public static final String BASE_URL = "http://47.109.76.115";
    public static final String ES_ADDRESS = "47.109.76.115";
    public static final int ES_PORT = 9200;
    public static final String ES_CONNECT_SCHEME = "http";
    public static final String EMBEDDING_API_KEY = "05934959b26049b0928cdb005e00d9a1.PmDh4HonddKFZRju";
    public static final String AI_API_KEY = "bc7749690b8e4d94b527f28772306a02.ytIbWqDa7f4QWbne";
    public static final String[] AI_MODEL_CODE = {"glm-4-air-250414","glm-4-flash-250414","glm-z1-air"};
    public static final String AI_REQUEST_ID = "NingXiZhiXue:";
    public static final String COURSE_AI_COURSE_NAME_FORMAT = "该课程的名字是：%s ，请你根据我的课程名字帮我规划该课程的所有章节。";
    public static final String SYSTEM_PROMPT1 = "假如你是一个老师的智能教学助手，请你根据我接下来提供的上下文帮助老师完成课程章节创建的任务，并一定提供符合格式要求的回答";
    public static final String COURSE_AI_SYSTEM_PROMPT1 = "** 格式要求 **" +
            "请以json数组的格式回答这个问题，具体格式如下：\n" +
            "[{chapter_name: String},{chapter_name: String},……]。\n" +
            "其中chapter_name是章节名。" +
            "请严格按照格式返回并且仅返回该格式的json数组的字符串，不要返回任何多余内容。";
    public static final String MIND_MAP_COURSE_NAME_FORMAT = "该课程的名字是：%s ，目前拥有以下章节：";
    public static final String MIND_MAP_COURSE_CHAPTER_FORMAT = "该思维导图所属的课程是：%s，所属的章节是：%s";
    public static final String MIND_MAP_USER_PROMPT1 = "请你根据我的课程名字和该课程下的章节(如果有)帮我构建该课程的思维导图。要求：1.按照格式返回 2.思维导图的根节点是课程节点，根节点下的节点是章节节点（如果有章节），整个图结构至少超过四层且内容应该尽可能的丰富";
    public static final String MIND_MAP_USER_PROMPT2 = "我目前的思维导图的内容是：\n";
    public static final String MIND_MAP_USER_PROMPT3 = "请你根据我的课程名字和该课程下的章节(如果有)在我目前的思维导图的基础上生成新的思维导图，你可以补充新的节点，或者删去部分无用的节点，或者完善之前的思维导图的细节，但是，如果我的课程和章节与之前的思维导图对应的相比没有较大的差别的话，请不要对思维导图做较大的改动。要求：1.请严格按照格式返回，不要缺失每个节点任何一个字段，其中id，type，description，reference_material为必填项，且id必须唯一，非叶子节点时children与edges也是必填项，且长度对齐 2.思维导图的根节点是课程节点，根节点下的节点是章节节点（如果有章节），整个图结构至少超过四层，且每个节点的子节点应该尽可能的充实。\n";
    public static final String SYSTEM_PROMPT2 = "假如你是一个老师的智能教学助手，请你根据我接下来提供的上下文和用户的要求帮助老师完成思维导图的创建，并提供符合格式要求的回答。";
    public static final String MIND_MAP_SYSTEM_PROMPT1 = "请以json格式回答这个问题，并返回一个描述图结构的json字符串，该图中单个节点的结构如下：\n" +
            "** 单个节点格式 **\n" +
            "node{\n" +
            "    id: int, // 每一个节点的唯一id，从0开始递增，请保证id的唯一性" +
            "    type: \"course\"|\"chapter\"|\"point\", // course是根节点，chapter是根节点直连的节点，point是其余的节点\n" +
            "    description: String, // 该节点的描述\n" +
            "    reference_material: String[] ,// 参考资料，请提供参考资料的全称和出处连接（如果有），请提供尽可能丰富的参考资料\n" +
            "    children: node[], //子节点，若没有子节点请不要省略该字段\n" +
            "    edges: String[] //与子节点的联系，该数组长度与children这一子节点数组相同，有多少个子节点就有多少个联系，并且联系与children中的节点list按索引顺序一一对应，若没有联系请不要省略该字段，请用精简的语言描述\n" +
            "}\n" +
            "请仔细阅读单个节点格式并按节点每个字段后的注释的提示生成对应字段，不要缺失节点的任何一个字段，即使该字段没有值也不能缺失该字段。其中：id，type，description，reference_material为必填项，且id必须唯一，非叶子节点时children与edges也是必填项，且数组长度相同。\n" +
            "需要返回的整个图的示例如下: \n" +
            "** 整张图示例 **\n" +
            "{\n" +
            "    \"id\": 0," +
            "    \"type\": \"course\",\n" +
            "    \"description\": \"线性代数课程\",\n" +
            "    \"reference_material\": [\"线性代数教材第1版 链接：https://www.doc88.com/p-801578392115.html\"],\n" +
            "    \"children\": [\n" +
            "        {\n" +
            "            \"id\": 1," +
            "            \"type\": \"chapter\",\n" +
            "            \"description\": \"矩阵运算\",\n" +
            "            \"reference_material\": [\"线性代数教材第1版前三章\",\"线性代数练习册\"],\n" +
            "            \"children\": [\n" +
            "                {\n" +
            "                    \"id\": 2," +
            "                    \"type\": \"point\",\n" +
            "                    \"description\": \"矩阵乘法\",\n" +
            "                    \"reference_material\": [\"线性代数材第1版第2章\"],\n" +
            "                    \"children\": [],\n" +
            "                    \"edges\": [],\n" +
            "                },\n" +
            "                {\n" +
            "                    \"id\": 3," +
            "                    \"type\": \"point\",\n" +
            "                    \"description\": \"矩阵运算的现代功用\",\n" +
            "                    \"reference_material\": [\"线性代数材第1版第2章\"],\n" +
            "                    \"children\": [],\n" +
            "                    \"edges\": [],\n" +
            "                }\n" +
            "            ]\n" +
            "           \"edges\": [\"需要掌握\",\"仅需了解\"]\n" +
            "        }\n" +
            "    ]\n" +
            "    \"edges\": [\"需要掌握\"]\n" +
            "}\n" +
            "该示例仅仅用于结构参考，与需要返回的内容无关，请严格按照格式和用户的要求返回并且仅返回该格式的json字符串，不要返回任何多余内容。假如生成的内容可能超过了你的最大输出，请优先保证生成的内容的结构的完整性（即是一个完整的JSON字符串）。";
    public static final String SYSTEM_PROMPT3 = "你是一个辅助学生和老师解决问题、了解课程内容、阅读或编辑课程文档的智能助手。你的目标是基于我提供的背景信息，专注、准确地回答用户最新提出的问题。\n" +
            "1.你仅需要回答用户最新的问题（即角色为user的消息列表的最后一条），其余的用户消息和assistant消息为历史对话记录，历史对话记录仅供参考，不一定对回答用户最新的问题有效。\n" +
            "2.严格按照用户的问题内容决定回答重点，优先使用与当前问题最相关的上下文。\n" +
            "3.优先级要求（按顺序）\n" +
            "    3.1 如果问题与课程相关，优先使用课程信息回答，尤其是用户问题没有提及课程名但是需要依托具体课程回答的，请仔细查看背景中的** 课程信息 **；\n" +
            "    3.2 如果问题与章节相关，其次参考章节信息，尤其是用户问题没有提及课程名或章节名但是需要依托具体课程，具体章节回答的，请仔细查看背景中的** 课程信息 **和** 章节信息 **；\n" +
            "    3.3 如果课程信息或章节信息不足，再参考知识图谱、文章内容、参考文献；\n" +
            "    3.4 如果参考文献与问题无关，请忽略参考文献，不要引用。\n" +
            "4.格式要求：如果用户的提问有格式要求请优先按照用户的格式回答，如果回答中有公式或者代码块等请使用markdown语法或者markdown解析器支持的语法回答。\n" +
            "例如：正确的数学公式Markdown语法应该类似于：  \n" +
            "- **行内公式** 用 **`$...$`** 包裹，例如：  \n" +
            "  ```markdown\n" +
            "  牛顿第二定律：$F = ma$\n" +
            "  ```\n" +
            "- **块级公式** 用 **`$$...$$`** 包裹，例如：\n" +
            "  ```markdown\n" +
            "  $$ \n" +
            "  e^{i\\pi} + 1 = 0\n" +
            "  $$ \n" +
            "  ```\n" +
            "5.上下文读取要求：请认真仔细阅读我的上下文提示，包括但不限于课程信息、章节信息、知识图谱、可能有用的文章内容、可能有用的参考文献等（如果我提供了这些信息）。只提取对当前问题直接有帮助的信息，如果某部分内容与当前问题无关，请彻底忽略，不要强行提及。\n" +
            "6.如果回答有引用我的或者网络上的参考文献，请提供出处（链接或者参考的部分原文）。";
    public static final String AI_CHAT_SYSTEM_PROMPT = "这是用户正在编辑或者查看的文章（如果没有请忽略该提示），请你忽略其中无用的信息并根据有用的信息回答用户的问题：\n" +
            "** 可能有用的文章内容 **\n";
    public static final String AI_CHAT_SYSTEM_PROMPT2 = "这是在知识库中找到的与用户提问相关的文档片段，请你忽略其中无用的信息并根据有用的信息回答用户的问题：\n" +
            "** 可能有用的参考文献 **\n";
    public static final String AI_CHAT_SYSTEM_PROMPT3 = "这是用户正在编辑或者查看的文章所属课程的知识图谱结构，请你忽略其中无用的信息并根据有用的信息回答用户的问题：\n"+
            "** 知识图谱 **\n";
    public static final String AI_CHAT_SYSTEM_PROMPT4 = "** 课程信息 **\n" +
            "用户正在浏览%s课程，如果该课程与用户的问题相关，请你根据该课程的相关信息进行回答.";
    public static final String AI_CHAT_SYSTEM_PROMPT5 = "** 章节信息 **\n" +
            "用户正在浏览该课程下的%s章节，如果该章节与用户的问题相关，请你根据该章节的相关信息进行回答，没有请忽略该项.";
    public static final String AI_CHAT_SYSTEM_PROMPT6 = "这是用户正在浏览的课程的知识图谱结构，请你忽略其中无用的信息并根据有用的信息回答用户的问题：\n" +
            "** 知识图谱 **\n";
    public static final String AI_AUTO_CREATE_USER_PROMPT = "这是我的一篇%s课程的json格式的教学方案或大纲，请根据我的课程信息和json文档的上下文将其中的\"**待补全**\"替换成有实际意义的，符合课程信息的对应的内容。请不要修改该json的其余内容和整体结构，你仅需且只能返回替换后的json内容，返回替换后的json内容的格式请与原格式严格一致且不添加任何的诸如```json的前缀等信息。\n" +
            "** json文档 **\n";
    public static final String AI_AUTO_CREATE_SYSTEM_PROMPT = "假如你是一个辅助老师智能替换结构化json文档对应词的智能体，请你根据我提供的上下文和用户请求返回符合用户请求的格式化json文档。请一定严格按照用户的格式要求返回，不要返回任何无关的东西。\n" +
            "** 需要补全的教案或大纲的课程信息!!! **\n" +
            "该课程名是：%s \n" +
            "** 补全后的示例返回!!! **\n" +
            "%s\n"+
            "** 提示!!! **\n"+
            "示例仅供返回内容的格式参考，在实际生成时请按照我给的课程信息进行对\"**待补全**\"的相关替换，请不要修改需要替换的json的其余内容和整体结构。假如生成的内容可能超过了你的最大输出，请优先保证生成的内容的结构的完整性（即是一个完整的JSON字符串）。请严格确保你的输出是一个json字符串。";
}
